home *** CD-ROM | disk | FTP | other *** search
-
- #ifndef _global_h
- # include "global.h"
- #endif
- #ifndef _real_h
- # include "real.h"
- #endif
-
- #ifndef RealZero
- const Real RealZero = 0.0;
- #endif
-
-
- FunTab::FunTab( double (*fkt) (double), double from_in, double to_in, int step_in ) {
-
- from = from_in;
- to = to_in;
- step = step_in;
- interval = (to-from)/Real((double)step);
-
- val = new Real [step+1];
-
- for (int i=0;i<=step;i++) {
- val[i] = fkt( from+interval*(double)i );
- }
- }
-
-
- FunTab::~FunTab() {
- if (val) delete [] val;
- }
-
- const Real &FunTab::GetVal( const Real &in ) const {
- double m = fmod( in, 2.0*M_PI );
- while( m<0 ) m+= M_PI*2.0;
- int ind = (int)((m-from)/interval+0.5);
- return val[ind];
- }
-
- Real FunTab::GetRezVal( const Real &in ) const {
- int hi = step;
- int lo = 0;
-
- int mid = (hi+lo)/2;
-
- while( mid!=lo ) {
- if (val[mid]>in) hi=mid;
- else lo=mid;
- mid = (hi+lo)/2;
- }
- return (double)mid*interval+from;
- }
-